﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEM_DAL
{
    public class ClienteDAL
    {
        SqlConnection cnn;
        public Boolean guardarCliente(Cliente elCliente)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();

                SqlCommand cmd = new SqlCommand("RegistrarCliente", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@RUC_DNI_Cliente", SqlDbType.NVarChar, 11);
                cmd.Parameters.Add("@Nombre", SqlDbType.NVarChar, 100);
                cmd.Parameters.Add("@Direccion", SqlDbType.NVarChar, 100);
                cmd.Parameters.Add("@Telefono", SqlDbType.NVarChar, 15);
                cmd.Parameters.Add("@FecReg", SqlDbType.NVarChar, 12);
                cmd.Parameters["@RUC_DNI_Cliente"].Value = elCliente.RUCDNICLiente;
                cmd.Parameters["@Nombre"].Value = elCliente.NomCliente;
                cmd.Parameters["@Direccion"].Value = elCliente.DirecCliente;
                cmd.Parameters["@Telefono"].Value = elCliente.TelefCliente;
                cmd.Parameters["@FecReg"].Value = elCliente.FecRegCLiente;
                cmd.ExecuteNonQuery();
                
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public Boolean ActualizarCliente(Cliente elCliente, Int32 CodigoCliente, String TempoRUC_DNI)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();

                SqlCommand cmd = new SqlCommand("ActualizarCliente", cnn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@Nombre", SqlDbType.NVarChar, 100);
                cmd.Parameters.Add("@Direccion", SqlDbType.NVarChar, 100);
                cmd.Parameters.Add("@Telefono", SqlDbType.NVarChar, 15);
                cmd.Parameters.Add("@FecReg", SqlDbType.NVarChar, 12);
                cmd.Parameters.Add("@RUC_DNI_Cliente", SqlDbType.NVarChar, 15);
                cmd.Parameters.Add("@CodigoCliente", SqlDbType.Int);
                cmd.Parameters.Add("@RucDNI_Tempo", SqlDbType.NVarChar, 11);

                cmd.Parameters["@Nombre"].Value = elCliente.NomCliente;
                cmd.Parameters["@Direccion"].Value = elCliente.DirecCliente;
                cmd.Parameters["@Telefono"].Value = elCliente.TelefCliente;
                cmd.Parameters["@FecReg"].Value = elCliente.FecRegCLiente;
                cmd.Parameters["@RUC_DNI_Cliente"].Value = elCliente.RUCDNICLiente;
                cmd.Parameters["@CodigoCliente"].Value = CodigoCliente;
                cmd.Parameters["@RucDNI_Tempo"].Value = TempoRUC_DNI;
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public DataTable ObtenerClientes(String TipoComprobante)
        {
            DataTable lista = null;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlDataAdapter da = new SqlDataAdapter("ObtenerClientes", cnn);
                da.SelectCommand.Parameters.AddWithValue("TipoComprobante",TipoComprobante);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                lista = new DataTable();
                da.Fill(lista);
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return lista;
        }
        public List<Cliente> BuscarClienteID(String RUCBuscar)
        {
            List<Cliente> lista;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("BuscarClienteRUC", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("RUCBuscar", RUCBuscar);
                lista = new List<Cliente>();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Cliente elCliente = new Cliente();
                    elCliente.RUCDNICLiente = dr["RUC"].ToString();
                    elCliente.DirecCliente = dr["Direccion"].ToString();
                    elCliente.TelefCliente = dr["Telefono"].ToString();
                    lista.Add(elCliente);
                }
                return lista;
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
    }
}
